iT邦幫忙

2025 iThome 鐵人賽

DAY 6
0
Modern Web

Git 起來!每日一招學起來系列 第 6

Day 6:.gitignore —— 別讓垃圾檔案跟你回家

  • 分享至 

  • xImage
  •  

今天我們來點相對輕鬆、好理解的話題~

前幾天我們學了怎麼 git addgit commit,把檔案存進歷史紀錄。

但這時候你可能會發現一個問題:

👉 為什麼一堆奇怪的檔案也被 Git 跟著記錄了?

例如:

node_modules/ 套件模組資料夾跟著被追蹤,整個專案瞬間變得龐大。

或者更慘,.env 裡的密碼被 commit 上去了,結果敏感資訊可能外洩 😱

那種心情真的會想立刻跑路。

其實,這些災難大多可以靠一個小小的檔案預防 —— .gitignore


為什麼需要 .gitignore

.gitignore 是一個設定檔,用來告訴 Git:

「這些檔案或資料夾不要管它,別放進版本控制。」

就像你在打包行李的時候,會先把垃圾丟掉,不會把早餐紙袋也塞進行李箱。

Git 的使命是「幫你記錄重要的版本」,但不是所有檔案都該進歷史。

舉幾個真實例子:

  • 套件資料夾node_modules/vendor/ 👉 幾百 MB,還能隨時重裝
  • 編譯輸出dist/build/ 👉 反正 build 一次就有,不需要備份
  • 私密檔案.env 👉 把密碼 commit 上去就等著收警告信吧
  • 系統垃圾.DS_StoreThumbs.db 👉 永遠不知道為何會出現在專案裡

如果沒有過濾,專案就會變得又大又髒,甚至可能留下「黑歷史」。


基本用法

在專案根目錄加一個 .gitignore 檔案,寫上規則:

# 忽略套件
node_modules/

# 忽略編譯出來的檔案
dist/
build/

# 忽略環境設定
.env

# 忽略系統垃圾
.DS_Store
Thumbs.db

之後再執行 git status,就會發現這些檔案自動消失,不會再出現在未追蹤清單裡。


常見規則小技巧

  • .log 👉 忽略所有 .log 結尾的檔案
  • secret/* 👉 忽略 secret 資料夾底下的所有檔案
  • !important.log 👉 反向規則,把 important.log 加回來

進階規則:只保留特定檔案

有時候我們想忽略整個資料夾,但裡面又有「唯一一個檔案」要保留:

logs/*
!logs/important.log

解釋:

  • logs/* 會先忽略掉 logs/ 底下的所有檔案
  • !logs/important.log 再例外地把 important.log 保留下來

延伸閱讀 :為什麼有些人會寫 !logs/

你可能看到有人寫:

logs/                # 忽略整個 logs 資料夾(包含內容)
!logs/               # 取消忽略資料夾本身(讓 Git 能「看見」資料夾)。
!logs/important.log  # 再指定只保留 important.log

跟上面的寫法差在哪裡?

差異點:

  • 延伸閱讀 這種 (!logs/):先忽略資料夾,再打開資料夾,讓 Git 往內比對規則。
  • 進階規則 那種 (logs/*):直接忽略資料夾底下的檔案(不含資料夾本身)。

⚠️ 注意:Git 本來就不會追蹤空資料夾,所以 !logs/ 實務上通常不是必須的。

只要用 logs/* 搭配 !logs/xxx.log,就能「忽略大部分檔案,只保留特定檔案」。

建議:寫法 B(logs/* + !logs/important.log)比較直觀,優先使用。


踩雷情境:忘記先加 .gitignore

最慘的情況就是「已經 commit 上去了」。

這時候 .gitignore 不會自動把它移掉,因為檔案已經被追蹤了。

要手動解除:

git rm -r --cached node_modules/

再 commit 一次,Git 才會真的不管它。


小挑戰 💪

  1. 在專案裡建立 .gitignore,忽略掉 node_modules/
  2. 新增一個測試檔案 debug.log,試試看 .log 的規則能不能把它忽略掉。
  3. 建立 logs/important.log,用 logs/* + !logs/important.log 只保留它,其他檔案忽略。

小結

.gitignore 就像專案的「過濾網」,幫你把不該進歷史的東西擋在外面。

養成習慣一開始就設定好 .gitignore,不但讓專案更乾淨,也能避免不小心把敏感資料外流,否則你的 repo 可能會變成垃圾桶。

👉 明天開始,我們要進入 分支的世界,學習怎麼在不同開發線之間自由切換


上一篇
Day 5:git reset vs. git restore —— 後悔藥怎麼吃?
下一篇
Day 7:git branch —— 認識平行時空
系列文
Git 起來!每日一招學起來19
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言